#pragma once 

typedef int DataType;

//定义节点
typedef struct SListNode
{
    DataType data;
    struct SListNode* next; //指向下一个节点，类型也是struct SListNode
}Node;

//初始化
//在函数操作中,如果需要修改head的指向，必须传递二级指针
void SListInit(Node** head);

//对于尾插、头插，没有节点需要head指向其他；尾删、头删，如果只有一个节点，需要让head指向空
//尾插
void SListPushBack(Node** head, DataType data);

//尾删
void SListPopBack(Node** head);

//头插
void SListPushFront(Node** head, DataType data);

//头删
void SListPopFront(Node** head);

//任意位置的插入，不牵扯到head
void SListInsert(Node* pos, DataType data);

//任意位置的删除
void SListErase(Node* pos);

//获得有效元素的大小，遍历，不牵扯到head
int SListSize(Node* head);

//查找，注意返回的是节点
Node* SListFind(Node* head, DataType data);

//销毁，所有节点没有了，head需要指向空
void SListDestroy(Node** head);

//测试
void SListPrint(Node* head);

